home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / COMAL / Z-Misc Series / (k)zf.d64 / src.rabbit < prev    next >
Text File  |  2007-03-01  |  25KB  |  1,646 lines

  1. ;
  2. ;--------------------------------;
  3. ;                                ;
  4. ; COMAL'S DISKRABBIT V.090785    ;
  5. ;                                ;
  6. ; MADE BY M.BOKHORST 1985        ;
  7. ;                                ;
  8. ; (C) 1985 BY DUTCH COMAL USERS  ;
  9. ;                         GROUP  ;
  10. ;                                ;
  11. ; LAST REVISON: 230386           ;
  12. ;--------------------------------;
  13. ;
  14. ;-CONSTANTS CBM -----------------;
  15. ;
  16. PARAM  =114
  17. REAL   =0
  18. INT    =1
  19. STR    =2
  20. ARRAY  =6
  21. PROC   =112
  22. VALUE  =PARAM+0
  23. REF    =PARAM+3
  24. ENDPRC =126
  25. ENDFNC =126
  26. FUNC   =227
  27. ;
  28. ARG    =1
  29. FILER  =201
  30. DNP    =208
  31. CHCKSM =210
  32. ILDEV  =217
  33. ILLO   =218
  34. ;
  35. LINK   =2
  36. DSCRD  =3
  37. BASIC  =11
  38. ;
  39. DIS    =8
  40. CR     =13
  41. LOWER  =14
  42. CLRPAG =147
  43. SHSPC  =160
  44. ;
  45. FALSE  =0
  46. TRUE   =1
  47. ;
  48. ROMMED =%00010000
  49. DEFPAG =%01000110
  50. ;
  51. INDEV  =8
  52. MAX    =$1D
  53. EOF    =$40
  54. LCOM   =$60
  55. ;
  56. HIDE   =$10
  57. SKIP   =$2C
  58. ;
  59. CPEN   =1
  60. CBORD  =6
  61. CBACK  =0
  62. ;
  63. JUMP   =$4C
  64. INJUMP =$6C
  65. ;
  66. ;-CONSTANTS 1541 ----------------;
  67. ;
  68. LED    =8
  69. REOI   =$10
  70. READ   =$80
  71. WRITE  =$90
  72. EXPRG  =$E0
  73. ;
  74. ;-VARIABLES 1541 ----------------;
  75. ;
  76. COMND  =$00
  77. COMND2 =$02
  78. COMTRK =$06
  79. COMSEC =$07
  80. COMTR2 =$0A
  81. COMSC2 =$0B
  82. TEMP   =$D5
  83. DRIVE  =$7F
  84. TRACK  =$80
  85. SECTOR =$81
  86. BUF0   =$99
  87. BUFNO  =$F9
  88. DOSFLG =$0101
  89. DOSTYP =$0102
  90. SUBCM1 =$024D
  91. SUBCM2 =$025B
  92. BUFFER =$0300
  93. DRMEM  =$0500
  94. PORT   =$1800
  95. PLED   =$1C00
  96. DIR    =$FE85
  97. DOSFRM =$FED5
  98. MAXTRK =$FED7
  99. ;
  100. ;-ROUTINES 1541 -----------------;
  101. ;
  102. LEDON  =$C118
  103. OKSTAT =$C1C8
  104. INIT   =$D005
  105. EXECOM =$D466
  106. REP1   =$E60A
  107. REP2   =$E645
  108. MAXSEC =$F24B
  109. WRSYNC =$FDA3
  110. DUMMY  =$FF0F
  111. RESET  =$FFFC
  112. ;
  113. ;-KERNAL VARIABLES --------------;
  114. ;
  115. STATUS =$90
  116. LDTND  =$98
  117. DFLTN  =$99
  118. DFLTO  =$9A
  119. FNLEN  =$B7
  120. LA     =$B8
  121. SA     =$B9
  122. FA     =$BA
  123. FNADR  =$BB
  124. LAT    =$0259
  125. FAT    =$0263
  126. SAT    =$026D
  127. PEN    =$0286
  128. IOPEN  =$031A
  129. ICLOSE =$031C
  130. ICHKIN =$031E
  131. ICKOUT =$0320
  132. ICLRCH =$0322
  133. IBASIN =$0324
  134. ;
  135. ;-I/O CBM -----------------------;
  136. ;
  137. VICON  =$D011
  138. RWRAST =$D012
  139. SPCON  =$D015
  140. BORDER =$D020
  141. BACK   =$D021
  142. CPORT  =$DD00
  143. ;
  144. ;-KERNAL ROUTINES ---------------;
  145. ;
  146. RETCR  =$F1B1
  147. DELPAR =$F2F3
  148. FINDFI =$F30F
  149. SFIPAR =$F31F
  150. IO1    =$F6FB
  151. IO2    =$F6FE
  152. IO3    =$F701
  153. IO4    =$F704
  154. IO5    =$F707
  155. IO6    =$F70A
  156. IO7    =$F70D
  157. IO8    =$F710
  158. IO9    =$F713
  159. SLIST  =$FF93
  160. TKSA   =$FF96
  161. IECIN  =$FFA5
  162. IECOUT =$FFA8
  163. UNTALK =$FFAB
  164. UNLIST =$FFAE
  165. LISTEN =$FFB1
  166. TALK   =$FFB4
  167. GETKEY =$FFE4
  168. ;
  169. ;-COMAL ROUTINES & VARIABLES ----;
  170. ;
  171. Q1     =$3B
  172. COPY   =$45
  173. PAGEB  =$82
  174. ERTLEN =$0200
  175. ERTEXT =$0201
  176. TRAPVC =$C7DE
  177. MODET  =$C80E
  178. NOREST =$C841
  179. DFBORD =$C850
  180. DFBACK =$C851
  181. DFFORG =$C852
  182. ACBORD =$C853
  183. ACBACK =$C854
  184. GOTO   =$C884
  185. FNDPAR =$C896
  186. PSHINT =$C9CE
  187. RUNERR =$C9FB
  188. CWRT   =$CA06
  189. EMPTY  =$CA2F
  190. CSTAT  =$CEA7
  191. ;
  192. ;-RABBIT ZERO PAGE VARIABLES ----;
  193. ;
  194. SAVE   =$55
  195. FROM   =$FB
  196. TO     =$FD
  197. ;
  198. ;-RABBIT NON ZERO PAGE VARIABLES ;
  199. ;
  200. VARBAS =$C000
  201. ;
  202. UBUF   =VARBAS
  203. OLDOPN =UBUF+256
  204. OLDCLS =OLDOPN+2
  205. OLDCHK =OLDCLS+2
  206. OLDOUT =OLDCHK+2
  207. OLDCLR =OLDOUT+2
  208. OLDBAS =OLDCLR+2
  209. OLDTRP =OLDBAS+2
  210. XSAVE  =OLDTRP+2
  211. YSAVE  =XSAVE+1
  212. TYPE   =YSAVE+1
  213. MODE   =TYPE+1
  214. INSTAL =MODE+1
  215. FAST   =INSTAL+1
  216. CHKING =FAST+1
  217. CHARD  =CHKING+1
  218. PTSAVE =CHARD+1
  219. SPRITE =PTSAVE+1
  220. DEV    =SPRITE+1
  221. FLOFF  =DEV+1
  222. WHERR  =FLOFF+1
  223. BLMODE =WHERR+1
  224. BUFED  =BLMODE+1
  225. ;
  226. ;-MODULE START ------------------;
  227. ;
  228. *=$7000
  229. ;
  230. ;--------------------------------;
  231. ;
  232. .MAC ADD
  233.     LDA ?1
  234.     CLC
  235.     ADC #<?2
  236.     STA ?1
  237.     LDA ?1+1
  238.     ADC #>?2
  239.     STA ?1+1
  240. .MND
  241. ;
  242. ;---------------------------------
  243. ;
  244. PAGE
  245. .BYTE DEFPAG
  246. .WORD END
  247. .WORD SIGNAL
  248. ;
  249. .BYTE  6,'RABBIT'
  250. .WORD PRTAB
  251. .WORD  EMPTY
  252. .BYTE  0
  253. ;
  254. PRTAB
  255. ;
  256. .BYTE  5,'BREAD'
  257. .WORD HREAD
  258. .BYTE  6,'BWRITE'
  259. .WORD HWRITE
  260. .BYTE  8,'SETBMODE'
  261. .WORD HTRANS
  262. .BYTE  7,'SETFAST'
  263. .WORD HFAST
  264. .BYTE  9,'SETROMMED'
  265. .WORD HROM
  266. .BYTE  9,'SETDEVICE'
  267. .WORD  HSDEV
  268. .BYTE  10,'SETOFFTEST'
  269. .WORD  HSOFF
  270. .BYTE  6,'DEVICE'
  271. .WORD  HDEV
  272. .BYTE  5,'TRACK'
  273. .WORD  HTRACK
  274. .BYTE  6,'SECTOR'
  275. .WORD  HSECT
  276. .BYTE  4,'FAST'
  277. .WORD  HFFAST
  278. .BYTE  6,'ROMMED'
  279. .WORD  HFROM
  280. .BYTE  7,'OFFTEST'
  281. .WORD  HOFF
  282. .BYTE  5,'RDERR'
  283. .WORD HRDERR
  284. .BYTE  9,'BLOCKMODE'
  285. .WORD HBMOD
  286. .BYTE 0
  287. ;
  288. HREAD
  289. .BYTE  PROC,<BGET,>BGET,4
  290. .BYTE VALUE+INT,VALUE+INT
  291. .BYTE  VALUE+INT,REF+STR
  292. .BYTE ENDPRC
  293. HWRITE
  294. .BYTE  PROC,<BPUT,>BPUT,4
  295. .BYTE VALUE+INT,VALUE+INT
  296. .BYTE  VALUE+INT,REF+STR
  297. .BYTE ENDPRC
  298. HFAST
  299. .BYTE PROC,<SFST,>SFST,1
  300. .BYTE VALUE+INT
  301. .BYTE ENDPRC
  302. HROM
  303. .BYTE PROC,<ROM,>ROM,1
  304. .BYTE VALUE+INT
  305. .BYTE ENDPRC
  306. HSDEV
  307. .BYTE  PROC,<SETDEV,>SETDEV,1
  308. .BYTE  VALUE+INT
  309. .BYTE  ENDPRC
  310. HDEV
  311. .BYTE  FUNC+REAL,<RETDEV,>RETDEV,0
  312. .BYTE  ENDFNC
  313. HTRANS
  314. .BYTE  PROC,<SELMOD,>SELMOD,1
  315. .BYTE VALUE+INT
  316. .BYTE  ENDPRC
  317. HTRACK
  318. .BYTE  FUNC+REAL,<RETRCK,>RETRCK,0
  319. .BYTE  ENDFNC
  320. HSECT
  321. .BYTE  FUNC+REAL,<RETSEC,>RETSEC,0
  322. .BYTE  ENDFNC
  323. HFFAST
  324. .BYTE FUNC+REAL,<FFAST,>FFAST,0
  325. .BYTE ENDFNC
  326. HFROM
  327. .BYTE FUNC+REAL,<FCROM,>FCROM,0
  328. .BYTE ENDFNC
  329. HSOFF
  330. .BYTE PROC,<PROFF,>PROFF,1
  331. .BYTE VALUE+INT
  332. .BYTE ENDPRC
  333. HOFF
  334. .BYTE FUNC+REAL,<FCOFF,>FCOFF,0
  335. .BYTE ENDFNC
  336. HRDERR
  337. .BYTE FUNC+REAL,<EREAD,>EREAD,0
  338. .BYTE  ENDFNC
  339. HBMOD
  340. .BYTE FUNC+REAL,<FNMOD,>FNMOD,0
  341. .BYTE ENDFNC
  342. ;
  343. ;--------------------------------;
  344. ;                                ;
  345. ;      DRIVE ROUTINES            ;
  346. ;                                ;
  347. ;--------------------------------;
  348. ;
  349. DRIVES
  350. OFFSET =DRIVES-DRMEM
  351. ;
  352.        JMP BREAD-OFFSET  
  353.        JMP BWRITE-OFFSET 
  354.        JMP RDFAST-OFFSET
  355.        JMP START-OFFSET
  356.        JMP DUMMY
  357.        JMP DUMMY
  358. ;
  359. EXEC   TAY
  360.        LDA TRACK
  361.        BEQ ILLEGL
  362.        CMP MAXTRK
  363.        BCS ILLEGL
  364.        STA COMTRK
  365.        JSR MAXSEC
  366.        CMP SECTOR
  367.        BEQ ILLEGL
  368.        BCS SECOK
  369. ILLEGL LDA #$66+$80
  370.        .BYTE SKIP
  371. CBMDOS LDA #$73+$80
  372.        .BYTE SKIP
  373. NOTFND LDA #$62+$80
  374.        .BYTE SKIP
  375. MISMAT LDA #$64+$80
  376. REPORT PHA
  377.        LDA #TRUE
  378.        JSR TOCBM-OFFSET
  379.        PLA
  380.        BMI NORERR
  381.        LDX BUFNO
  382.        JMP REP1
  383. NORERR AND #$7F
  384.        JMP REP2
  385. SECOK  LDA SECTOR
  386.        STA COMSEC
  387.        TYA
  388.        AND #$F0
  389.        CMP #WRITE
  390.        BNE FORMOK
  391.        TYA
  392.        LSR A
  393.        BCS FORMAT
  394.        LDA DOSFLG
  395.        BCC FORM
  396. FORMAT LDA DOSTYP
  397. FORM   BEQ FORMOK
  398.        CMP DOSFRM
  399.        BNE CBMDOS
  400. FORMOK STY SUBCM1
  401.        STY COMND
  402.        STY SUBCM2
  403. WEXEC  LDA COMND
  404.        BMI WEXEC
  405.        CMP #2
  406.        BCS REPORT
  407.        LDA #FALSE
  408.        JMP TOCBM-OFFSET
  409. ;
  410. BLOCK  STA TRACK
  411.        STX SECTOR
  412.        STY DRIVE
  413.        JSR LEDON  
  414.        LDX #0     
  415.        STX BUFNO  
  416.        BCS WRTBL  
  417.        LDA #READ  
  418.        .BYTE SKIP 
  419. WRTBL  LDA #WRITE 
  420.        ORA DRIVE
  421.        JSR EXEC-OFFSET
  422.        SEI
  423.        LDA PLED
  424.        AND #255-LED
  425.        STA PLED
  426.        CLI
  427.        RTS
  428. ;
  429. TOCBM  STA TEMP   
  430. FIRST  BIT PORT   
  431.        BPL FIRST  
  432.        SEI
  433.        LDA #REOI
  434.        STA PORT   
  435. SECOND BIT PORT
  436.        BMI SECOND 
  437.        LDX #4     
  438. NEXT   LDA #0
  439.        ASL TEMP
  440.        ROL A
  441.        ASL A
  442.        ASL TEMP
  443.        ROL A      
  444.        ASL A      
  445.        STA PORT
  446.        DEX
  447.        BNE NEXT
  448.        LDX #1
  449.        DEX
  450.        BNE WAIT
  451. WAIT   NOP
  452.        NOP
  453.        LDA #$0F   
  454.        STA PORT   
  455.        RTS
  456. ;
  457. FRMCBM BIT PORT   
  458.        BPL FRMCBM 
  459.        SEI
  460.        LDA #REOI
  461.        STA PORT
  462. SYNC   BIT PORT
  463.        BMI SYNC   
  464.        LDX #4
  465. WT     DEX
  466.        BNE WT
  467.        STX PORT   
  468.        LDX #4
  469. NXTBIT LDA PORT
  470.        LSR A
  471.        PHP
  472.        LSR A
  473.        LSR A
  474.        ROR TEMP
  475.        PLP
  476.        ROR TEMP
  477.        DEX
  478.        BNE NXTBIT 
  479.        LDA #$0F   
  480.        STA PORT
  481.        LDA TEMP
  482.        RTS
  483. ;
  484. SEND   LDY #0
  485. SENDBY LDA BUFFER,Y
  486.        JSR TOCBM-OFFSET
  487.        INY
  488.        BNE SENDBY
  489.        CLI
  490.        RTS
  491. ;
  492. SEARCH LDA DIR
  493.        LDX #1
  494. NXTBLK LDY PARM3
  495.        CLC
  496.        JSR BLOCK-OFFSET
  497.        LDY #2
  498. REPEAT LDA BUFFER,Y
  499.        AND #7
  500.        BEQ NXTNAM
  501.        INY
  502.        INY
  503.        INY
  504.        LDX #0
  505.        BEQ INSRCH
  506. CNTEST LDA NAME-OFFSET,X
  507. CONT   CMP BUFFER,Y
  508.        BEQ NXTCHA
  509.        CMP #'?
  510.        BNE NXTNAM
  511.        LDA BUFFER,Y
  512.        CMP #SHSPC
  513.        BEQ NXTNAM
  514. NXTCHA INX
  515.        INY
  516.        CPX NAMEND-OFFSET
  517.        BCS TESTND
  518. INSRCH LDA NAME-OFFSET,X
  519.        CMP #'*
  520.        BEQ CLCPAR
  521.        BNE CONT
  522. TESTND CPX #16
  523.        BCS CLCPAR
  524.        LDA BUFFER,Y
  525.        CMP #SHSPC
  526.        BEQ CLCPAR
  527. NXTNAM TYA
  528.        AND #$E0
  529.        CLC
  530.        ADC #32+2
  531.        TAY
  532.        BCC REPEAT
  533.        LDX BUFFER+1
  534.        LDA BUFFER
  535.        BNE NXTBLK
  536.        JMP NOTFND-OFFSET
  537. CLCPAR TYA
  538.        AND #$E0
  539.        TAY
  540.        LDA BUFFER+2,Y
  541.        LDX BUFFER+3,Y
  542.        PHA
  543.        LDA BUFFER+4,Y
  544.        TAY
  545.        PLA
  546.        RTS
  547. ;
  548. RDFAST JSR SEARCH-OFFSET
  549.        AND #7
  550.        CMP #4
  551.        BEQ WRNGTP
  552.        STX PARM1
  553.        STY PARM2
  554.        LDY NAMEND-OFFSET
  555.        CMP NAME-OFFSET,Y
  556.        BEQ NOTWR
  557.        LDA NAME-OFFSET,Y
  558.        BNE WRNGTP
  559. NOTWR  LDA #255
  560.        JMP TOCBM-OFFSET
  561. WRNGTP JMP MISMAT-OFFSET
  562. ;
  563. NAMEND
  564. NAME=NAMEND+1
  565. ;
  566. .BYTE  0,'                ',0
  567. ;
  568. START  LDA PARM1
  569.        LDX PARM2
  570. RDYNOT LDY PARM3
  571.        CLC
  572.        JSR BLOCK-OFFSET
  573.        JSR FRMCBM-OFFSET
  574.        BNE CLOSED
  575.        JSR SEND-OFFSET
  576.        LDX BUFFER+1
  577.        LDA BUFFER
  578.        BNE RDYNOT
  579. CLOSED RTS
  580. ;
  581. PARM1=*-OFFSET
  582. .BYTE 0
  583. PARM2=*-OFFSET
  584. .BYTE 0
  585. DRNO
  586. PARM3=*-OFFSET
  587. .BYTE 0
  588. ;
  589. ENDDR
  590. ;
  591. BREAD  LDA PARM1
  592.        LDX PARM2
  593.        LDY PARM3
  594.        CLC
  595.        JSR BLOCK-OFFSET
  596.        JMP SEND-OFFSET
  597. ;
  598. BWRITE JSR RECEIV-OFFSET
  599.        LDA PARM1
  600.        LDX PARM2
  601.        LDY PARM3
  602.        SEC
  603.        JMP BLOCK-OFFSET
  604. ;
  605. RECEIV LDY #0
  606. NEXTBY JSR FRMCBM-OFFSET
  607.        STA BUFFER,Y
  608.        INY
  609.        BNE NEXTBY
  610.        CLI
  611.        RTS
  612. ;
  613. ENDBLK
  614. ;
  615. DRVS1
  616. OFFST1 =DRVS1-DRMEM
  617. ;
  618.        JMP INTCOM-OFFST1
  619.        JMP READCD-OFFST1
  620.        JMP DESTR-OFFST1
  621.        JMP DUMMY
  622.        JMP DUMMY
  623.        JMP DUMMY
  624. ;
  625. DESTR  LDA DIR
  626.        STA COMTR2
  627.        LDA #0
  628.        STA COMSC2
  629.        LDA #EXPRG
  630.        ORA DRIVE
  631.        STA COMND2
  632. WTDEST LDA COMND2
  633.        BMI WTDEST
  634.        JMP (RESET)
  635. ;
  636. INTCOM JSR WRSYNC
  637.        LDA #1
  638.        STA COMND2
  639.        RTS
  640. ;
  641. READCD LDA DIR
  642.        STA COMTRK
  643.        LDA #18
  644.        STA COMSEC
  645.        LDA #READ
  646.        ORA DRIVE
  647.        STA COMND
  648. CONTRL LDA COMND
  649.        BMI CONTRL
  650.        CMP #2
  651.        BCS CONERR
  652.        RTS
  653. CONERR LDX #0
  654.        JMP REP1
  655. ;
  656. ENDR1
  657. ;
  658. ;--------------------------------;
  659. ;                                ;
  660. ;      CBM ROUTINES              ;
  661. ;                                ;
  662. ;--------------------------------;
  663. ;
  664. BGET   JSR BLTEST
  665.        LDA #4
  666.        JSR FNDPAR
  667.        LDY #0
  668.        LDA (COPY),Y
  669.        BEQ ILSTR
  670.        JSR TRPAR
  671.        LDX #'3
  672.        JSR CMD
  673.        JSR GET
  674.        LDA #4
  675.        JSR FNDPAR
  676.        LDY #2
  677.        LDA #1
  678.        STA (COPY),Y
  679.        INY
  680.        LDA #0
  681.        STA (COPY),Y
  682.        ADD COPY,4
  683.        LDY #0
  684. TRBYT  LDA UBUF,Y
  685.        STA (COPY),Y
  686.        INY
  687.        BNE TRBYT
  688.        LDA #TRUE
  689.        STA BUFED
  690.        RTS
  691. ARGUM  LDX #ARG
  692.        JMP RUNERR
  693. ;
  694. ILSTR  LDA #<STRING
  695.        LDX #>STRING
  696.        JMP FILE0
  697. ;
  698. BPUT   JSR BLTEST
  699.        LDA #4
  700.        JSR FNDPAR
  701.        LDY #2
  702.        LDA (COPY),Y
  703.        CMP #1
  704.        BNE ILSTR
  705.        INY
  706.        LDA (COPY),Y
  707.        BNE ILSTR
  708.        ADD COPY,4
  709.        LDY #0
  710. TRSTR  LDA (COPY),Y
  711.        STA UBUF,Y
  712.        INY
  713.        BNE TRSTR
  714.        JSR TRPAR
  715.        LDX #'4
  716.        JSR CMD
  717.        JMP PUT
  718. ;
  719. SFST   JSR FLAG
  720.        BNE SETFT
  721.        JSR FSTOPN
  722.        JSR DRPROT
  723.        JMP RESVEC
  724. SETFT  JMP VECTOR
  725. ;
  726. ROM    JSR SFST
  727.        JSR FLAG
  728.        BNE SETROM
  729.        LDA PAGE
  730.        AND #255-ROMMED
  731.        STA PAGE
  732.        RTS
  733. SETROM LDA PAGE
  734.        ORA #ROMMED
  735.        STA PAGE
  736.        RTS
  737. ;
  738. FLAG   LDA #1
  739.        JSR FNDPAR
  740.        LDY #0
  741.        LDA (COPY),Y
  742.        INY
  743.        ORA (COPY),Y
  744.        RTS
  745. ;
  746. FSTOPN LDA FAST
  747.        BNE FILOPN
  748.        RTS
  749. FILOPN LDA #<ALOPN
  750.        LDX #>ALOPN
  751.        JMP FILE0
  752. ;
  753. BLTEST LDA BLMODE
  754.        BEQ RNOVA
  755.        RTS
  756. RNOVA  LDA #<NOVAL
  757.        LDX #>NOVAL
  758.        JMP FILE0
  759. ;
  760. DRPROT LDA BLMODE
  761.        BNE MEMPT
  762.        RTS
  763. MEMPT  LDA #<BLKMOD
  764.        LDX #>BLKMOD
  765.        JMP FILE0
  766.    ;
  767. IFBUF  LDA BUFED
  768.        BEQ NOTUE
  769.        RTS
  770. NOTUE  LDA #<NOTBUF
  771.        LDX #>NOTBUF
  772.        JMP FILE0
  773. ;
  774. SETDEV JSR FSTOPN
  775.        JSR DRPROT
  776.        LDA #1
  777.        JSR GETPAR
  778.        CMP #32
  779.        BCS ILD
  780. DEVOK  STA DEV
  781.        RTS
  782. ILD    LDX #ILDEV
  783.        JMP RUNERR
  784. ;
  785. FCROM  LDA PAGE
  786.        AND #ROMMED
  787.        LSR A
  788.        LSR A
  789.        LSR A
  790.        LSR A
  791.        TAX
  792.        BPL RBYTE
  793. ;
  794. FNMOD  LDX BLMODE
  795.        BPL RBYTE
  796. ;
  797. RETDEV LDX DEV
  798.        BPL RBYTE
  799. ;
  800. FFAST  LDX INSTAL
  801.        BPL RBYTE
  802. ;
  803. EREAD  LDX WHERR
  804.        BPL RBYTE
  805. ;
  806. RETRCK JSR IFBUF
  807.        LDX UBUF
  808.        BPL RBYTE
  809. ;
  810. FCOFF  LDX FLOFF
  811.        BPL RBYTE
  812. ;
  813. RETSEC JSR IFBUF
  814.        LDX UBUF+1
  815. RBYTE  LDA #0
  816.        JMP PSHINT
  817. ;
  818. PROFF  JSR FLAG
  819.        BEQ SETOFF
  820.        LDA #TRUE
  821. SETOFF STA FLOFF
  822.        RTS
  823. ;
  824. SELMOD JSR TSTINS
  825.        JSR FSTOPN
  826.        JSR FLAG
  827.        BNE SETMUP
  828.        JSR PASSI
  829.        LDA #FALSE
  830.        STA BLMODE
  831.        STA BUFED
  832.        RTS
  833. SETMUP JSR BTRANS
  834.        LDA #TRUE
  835.        STA BLMODE
  836.        LDA #FALSE
  837.        STA BUFED
  838.        RTS
  839. ;
  840. TSTINS LDA INSTAL
  841.        BEQ NOTINP
  842.        RTS
  843. NOTINP LDA #<NOTFST
  844.        LDX #>NOTFST
  845.        JMP FILE0
  846. ;
  847. SIGNAL CPY #LINK
  848.        BNE NOLINK
  849.        LDA #TRUE
  850.        STA NOREST
  851.        LDA FA
  852.        CMP #4
  853.        BCS INVAL
  854.        LDA #INDEV
  855. INVAL  STA DEV
  856. ;      JSR IFCOPY
  857.        LDA #FALSE
  858.        STA INSTAL
  859.        STA FAST
  860.        STA CHKING
  861.        STA FLOFF
  862.        STA WHERR
  863.        STA BLMODE
  864.        STA NOREST
  865.        LDA PAGE
  866.        ORA #ROMMED
  867.        STA PAGE
  868.        LDA #CPEN
  869.        STA PEN
  870.        STA DFFORG
  871.        LDA #CBORD
  872.        STA BORDER
  873.        STA DFBORD
  874.        STA ACBORD
  875.        LDA #CBACK
  876.        STA BACK
  877.        STA DFBACK
  878.        STA ACBACK
  879.        LDA #<RABMSG
  880.        LDX #>RABMSG
  881.        JSR TEXT
  882.        JMP VECTOR
  883. NOLINK CPY #DSCRD
  884.        BNE CARD
  885.        LDA PAGE
  886.        AND #ROMMED
  887.        BNE COMAL
  888.        JSR TOPEN
  889.        JSR RESVEC
  890.        LDA #<KILL
  891.        LDX #>KILL
  892.        JMP TEXT
  893. CARD   CPY #BASIC
  894.        BNE COMAL
  895. TOPEN  LDA FAST
  896.        BEQ COMAL
  897.        JMP CLOSE
  898. COMAL  RTS
  899. ;
  900. STRANS LDA #<DRIVES
  901.        LDY #>DRIVES
  902. SOURCE STA FROM
  903.        STY FROM+1
  904.        RTS
  905. ;
  906. BTRANS JSR STRANS
  907.        LDX #<ENDBLK
  908.        LDY #>ENDBLK
  909. TRANS  STX XSAVE
  910.        STY YSAVE
  911.        LDA #<DRMEM
  912.        LDY #>DRMEM
  913.        STA TO
  914.        STY TO+1   
  915.        LDA #0
  916.        STA STATUS 
  917. NXTSET LDA DEV
  918.        JSR LISTEN
  919.        LDA #15+LCOM
  920.        JSR SLIST
  921.        LDA STATUS 
  922.        BPL OK
  923.        LDX #DNP
  924.        JMP RUNERR
  925. OK     LDA #'M    
  926.        JSR IECOUT
  927.        LDA #'-
  928.        JSR IECOUT
  929.        LDA #'W
  930.        JSR IECOUT
  931.        LDA TO
  932.        JSR IECOUT
  933.        LDA TO+1
  934.        JSR IECOUT
  935.        LDA #MAX   
  936.        JSR IECOUT 
  937.        LDY #0
  938. NXTBYT LDA (FROM),Y
  939.        JSR IECOUT 
  940.        INY
  941.        CPY #MAX   
  942.        BCC NXTBYT
  943.        JSR UNLIST
  944.        ADD TO,MAX 
  945.        ADD FROM,MAX
  946.        LDA FROM
  947.        SEC
  948.        SBC XSAVE
  949.        LDA FROM+1
  950.        SBC YSAVE
  951.        BCC NXTSET 
  952.        RTS
  953. ;
  954. TDRIVE STA SAVE
  955.        LDA #$0B
  956.        STA CPORT  
  957. SHAKE  LDA CPORT
  958.        BPL SHAKE
  959.        LDA #$03
  960.        STA CPORT  
  961.        LDX #4
  962. NRED   LDA #3
  963.        LSR SAVE
  964.        ROR A
  965.        LSR SAVE
  966.        ROR A
  967.        LSR A
  968.        LSR A
  969.        NOP
  970.        STA CPORT
  971.        DEX
  972.        BNE NRED
  973.        LDX #1
  974. DEL    DEX
  975.        BNE DEL
  976.        LDA #0
  977.        BEQ WTED
  978. WTED   RTS
  979. ;
  980. FDRIVE LDA #$0B
  981.        STA CPORT  
  982. SH     LDA CPORT
  983.        BPL SH
  984.        LDA #$03
  985.        STA CPORT  
  986.        LDX #5
  987. BEFORE DEX
  988.        NOP
  989.        BNE BEFORE
  990.        LDX #4
  991. BNEXT  LDA CPORT
  992.        ASL A
  993.        PHP
  994.        ASL A
  995.        ROL SAVE
  996.        PLP
  997.        ROL SAVE
  998.        DEX
  999.        BNE BNEXT
  1000.        LDA #0
  1001.        BEQ WATED
  1002. WATED  LDA SAVE
  1003.        EOR #$FF   
  1004.        RTS
  1005. ;
  1006. CMD    LDA #0
  1007.        STA STATUS 
  1008.        LDA DEV
  1009.        JSR LISTEN
  1010.        LDA #15+LCOM
  1011.        JSR SLIST
  1012.        LDA STATUS
  1013.        BPL CON
  1014. NOTPRS LDX #DNP
  1015.        JMP RUNERR
  1016. CON    LDA #'U
  1017.        JSR IECOUT
  1018.        TXA
  1019.        JSR IECOUT
  1020.        JMP UNLIST
  1021. ;
  1022. PASSI  LDA #0
  1023.        STA STATUS
  1024.        LDA DEV
  1025.        JSR LISTEN
  1026.        LDA #15+LCOM
  1027.        JSR SLIST
  1028.        LDA STATUS
  1029.        BMI NOTPRS
  1030.        LDA #'I
  1031.        JSR IECOUT
  1032.        JMP UNLIST
  1033. ;
  1034. SETBL  PHA
  1035.        LDA DEV
  1036.        JSR LISTEN
  1037.        LDA #15+LCOM
  1038.        JSR SLIST
  1039.        LDA STATUS
  1040.        BMI NOTPRS
  1041. STOK   LDA #'M
  1042.        JSR IECOUT
  1043.        LDA #'-
  1044.        JSR IECOUT
  1045.        LDA #'W
  1046.        JSR IECOUT
  1047.        LDA #<PARM1
  1048.        JSR IECOUT
  1049.        LDA #>PARM1
  1050.        JSR IECOUT
  1051.        LDA #3
  1052.        JSR IECOUT
  1053.        PLA
  1054.        JSR IECOUT
  1055.        TXA
  1056.        JSR IECOUT
  1057.        TYA
  1058.        JSR IECOUT
  1059.        JMP UNLIST
  1060. ;
  1061. PUT    JSR DISA
  1062.        LDY #0
  1063. NBYTE  LDA UBUF,Y
  1064.        JSR TDRIVE
  1065.        INY
  1066.        BNE NBYTE
  1067.        JSR FDRIVE
  1068.        BNE PUTERR
  1069.        JMP ENA
  1070. ;
  1071. GET    JSR DISA
  1072.        JSR FDRIVE
  1073.        BEQ GTBLCK
  1074. PUTERR JSR ENA
  1075.        JMP CSTAT
  1076. GTBLCK LDY #0
  1077. NXTBT  JSR FDRIVE
  1078.        STA UBUF,Y
  1079.        INY
  1080.        BNE NXTBT
  1081.        JMP ENA
  1082. ;
  1083. DISA   SEI
  1084.        LDA VICON
  1085.        AND #255-HIDE
  1086.        STA VICON
  1087.        LDA CPORT
  1088.        STA PTSAVE
  1089.        LDA SPCON
  1090.        STA SPRITE
  1091.        LDA #0
  1092.        STA SPCON
  1093.        LDY #2
  1094. RASTER LDA RWRAST
  1095.        CMP #160
  1096.        BNE RASTER
  1097. SAMLIN CMP RWRAST
  1098.        BEQ SAMLIN
  1099.        DEY
  1100.        BNE RASTER
  1101.        RTS
  1102. ;
  1103. ENA    LDA PTSAVE
  1104.        STA CPORT
  1105.        LDA SPRITE
  1106.        STA SPCON
  1107.        LDA VICON
  1108.        ORA #HIDE
  1109.        STA VICON
  1110.        CLI
  1111.        RTS
  1112. ;
  1113. GETPAR JSR FNDPAR
  1114.        LDY #0
  1115.        LDA (COPY),Y
  1116.        BNE OVRFLW
  1117.        INY
  1118.        LDA (COPY),Y
  1119.        RTS
  1120. ;
  1121. TRPAR  LDA #3
  1122.        JSR GETPAR
  1123.        CMP #2
  1124.        BCS OVRFLW
  1125.        STA YSAVE
  1126.        LDA #2
  1127.        JSR GETPAR
  1128.        STA XSAVE
  1129.        LDA #1
  1130.        JSR GETPAR
  1131.        LDX XSAVE
  1132.        LDY YSAVE
  1133.        JMP SETBL
  1134. OVRFLW LDX #ARG
  1135.        JMP RUNERR
  1136. ;
  1137. TEXT   STA COPY
  1138.        STX COPY+1
  1139.        LDY #0
  1140. CHARA  LDA (COPY),Y
  1141.        BEQ STOPIT
  1142.        JSR CWRT
  1143.        INY
  1144.        BNE CHARA
  1145. STOPIT RTS
  1146. ;
  1147. VECTOR LDA INSTAL
  1148.        BNE ISIN
  1149.        LDX #11
  1150. TRVEC  LDA IOPEN,X
  1151.        STA OLDOPN,X
  1152.        DEX
  1153.        BPL TRVEC
  1154.        LDA #<OPEN
  1155.        LDY #>OPEN
  1156.        STA IOPEN
  1157.        STY IOPEN+1
  1158.        LDA #<CLOSE
  1159.        LDY #>CLOSE
  1160.        STA ICLOSE
  1161.        STY ICLOSE+1
  1162.        LDA #<CHKFST
  1163.        LDY #>CHKFST
  1164.        STA ICHKIN
  1165.        STY ICHKIN+1
  1166.        LDA #<CHFOUT
  1167.        LDY #>CHFOUT
  1168.        STA ICKOUT
  1169.        STY ICKOUT+1
  1170.        LDA #<CLR
  1171.        LDY #>CLR
  1172.        STA ICLRCH
  1173.        STY ICLRCH+1
  1174.        LDA #<GETIN
  1175.        LDY #>GETIN
  1176.        STA IBASIN
  1177.        STY IBASIN+1
  1178.        LDA TRAPVC
  1179.        LDY TRAPVC+1
  1180.        STA OLDTRP
  1181.        STY OLDTRP+1
  1182.        LDA #<HANDLE
  1183.        LDY #>HANDLE
  1184.        STA TRAPVC
  1185.        STY TRAPVC+1
  1186.        LDA #TRUE
  1187.        STA INSTAL
  1188. ISIN   RTS
  1189. ;
  1190. RESVEC LDA INSTAL
  1191.        BEQ ISRES
  1192.        LDX #11
  1193. RESNXT LDA OLDOPN,X
  1194.        STA IOPEN,X
  1195.        DEX
  1196.        BPL RESNXT
  1197.        LDA OLDTRP
  1198.        LDY OLDTRP+1
  1199.        STA TRAPVC
  1200.        STY TRAPVC+1
  1201.        LDA #FALSE
  1202.        STA INSTAL
  1203. ISRES  RTS
  1204. ;
  1205. PARSE  LDY #FALSE
  1206.        STY TYPE
  1207.        STY MODE
  1208.        STY NAMEND
  1209.        LDA (FNADR),Y
  1210.        AND #1
  1211.        STA DRNO
  1212. CNFND  CPY FNLEN
  1213.        BCC SETRUE
  1214.        RTS
  1215. SETRUE LDA (FNADR),Y
  1216.        CMP #':
  1217.        BEQ CFND
  1218.        CMP #'$
  1219.        BNE NOCAT
  1220.        RTS
  1221. NOCAT  INY
  1222.        BNE CNFND
  1223. CFND   LDX #0
  1224. NEON   INY
  1225.        CPY FNLEN
  1226.        BCS OUT
  1227.        LDA (FNADR),Y
  1228.        CMP #',
  1229.        BEQ FCOM
  1230.        CPX #16
  1231.        BCS NEON
  1232.        STA NAME,X
  1233.        INX
  1234.        INC NAMEND
  1235.        BNE NEON
  1236. FCOM   INY
  1237.        CPY FNLEN
  1238.        BCS OUT
  1239.        LDA (FNADR),Y
  1240.        STA TYPE
  1241. SNFND  INY
  1242.        CPY FNLEN
  1243.        BCS OUT
  1244.        LDA (FNADR),Y
  1245.        CMP #',
  1246.        BNE SNFND
  1247.        INY
  1248.        CPY FNLEN
  1249.        BCS OUT
  1250.        LDA (FNADR),Y
  1251.        STA MODE
  1252. OUT    LDA MODE
  1253.        BNE NOTSPL
  1254.        LDA TYPE
  1255.        STA MODE
  1256.        LDA #0
  1257.        STA TYPE
  1258.        CLC
  1259. NOTSPL RTS
  1260. ;
  1261. ALLOFF LDA FLOFF
  1262.        BNE YETST
  1263.        RTS
  1264. YETST  LDX #15
  1265. NDEV   LDY #0
  1266.        STY STATUS
  1267.        CPX DEV
  1268.        BEQ DECR
  1269.        TXA
  1270.        JSR LISTEN
  1271. ;      LDA #15+LCOM
  1272. ;      JSR SLIST
  1273.        JSR UNLIST
  1274.        LDA STATUS
  1275.        BPL OFF
  1276. DECR   DEX
  1277.        CPX #4
  1278.        BCS NDEV
  1279.        RTS
  1280. OFF    LDA #<TURN
  1281.        LDX #>TURN
  1282.        JMP FILE0
  1283. ;
  1284. OPEN   LDX FA
  1285.        CPX DEV
  1286.        BEQ NOTNOR
  1287. NORMAL JMP (OLDOPN)
  1288. NOTNOR LDX LA
  1289.        JSR FINDFI
  1290.        BNE NOTOPN
  1291.        JMP IO2
  1292. NOTOPN LDA FAST
  1293.        BEQ POSI
  1294.        LDA #<ALOPN
  1295.        LDX #>ALOPN
  1296.        JMP FILELA
  1297. POSI   LDA BLMODE
  1298.        BEQ BLPOS
  1299.        LDA #<BLKMOD
  1300.        LDX #>BLKMOD
  1301.        JMP FILELA
  1302. BLPOS  LDA SA
  1303.        AND #$1F
  1304.        CMP #15
  1305.        BCS NORMAL
  1306.        LDA LA
  1307.        BEQ NORMAL
  1308.        JSR PARSE
  1309.        BCS NORMAL
  1310.        LDA MODE
  1311.        BEQ MREAD
  1312.        CMP #'R
  1313.        BNE NORMAL
  1314. MREAD  LDA TYPE
  1315.        CMP #'L
  1316.        BEQ NORMAL
  1317.        LDX LDTND
  1318.        BEQ COMPL
  1319. CONTE  DEX
  1320.        BEQ COMPL
  1321.        LDA FAT,X
  1322.        CMP DEV
  1323.        BNE CONTE
  1324.        LDA #<NORFIL
  1325.        LDX #>NORFIL
  1326.        JMP FILELA
  1327. COMPL  LDX LDTND
  1328. ;      LDA MODET,X
  1329. ;      AND #$08
  1330. ;      BNE DPLUS
  1331. ;      LDX #ILLO
  1332. ;      JMP RUNERR
  1333. DPLUS  INC LDTND
  1334.        LDA LA
  1335.        STA LAT,X
  1336.        LDA SA
  1337.        ORA #LCOM
  1338.        STA SA
  1339.        STA SAT,X
  1340.        LDA FA
  1341.        STA FAT,X
  1342.        LDA TYPE
  1343.        LDY #3
  1344. SETYP  CMP SPU-1,Y
  1345.        BEQ TYFND
  1346.        DEY
  1347.        BNE SETYP
  1348. TYFND  TYA
  1349.        LDY NAMEND
  1350.        STA NAME,Y
  1351.        JSR ALLOFF
  1352.        JSR PASSI
  1353.        JSR STRANS
  1354.        LDX #<ENDDR
  1355.        LDY #>ENDDR
  1356.        JSR TRANS
  1357.        LDX #'5
  1358.        JSR CMD
  1359.        JSR DISA
  1360. NXTDIR JSR FDRIVE
  1361.        BEQ NXTDIR
  1362.        CMP #255
  1363.        BNE NOPEN
  1364.        LDA LA
  1365.        STA FAST
  1366.        LDA #FALSE
  1367.        STA CHKING
  1368.        STA WHERR
  1369. NOPEN  JSR ENA
  1370.        CLC
  1371.        RTS
  1372. ;
  1373. CHKFST STY YSAVE
  1374.        TXA
  1375.        BEQ TESPOS
  1376.        CPX FAST
  1377.        BEQ SETFST
  1378. NRCHK  JMP (OLDCHK)
  1379. TESPOS LDA CHKING
  1380.        BEQ NRCHK
  1381.        LDA #<ALOPN
  1382.        LDX #>ALOPN
  1383.        JMP FILE0
  1384. SETFST JSR FINDFI
  1385.        BEQ CHOK
  1386.        JMP IO3
  1387. CHOK   JSR SFIPAR
  1388.        LDA FA
  1389.        STA DFLTN
  1390.        LDA CHKING
  1391.        BNE ALREAD
  1392.        LDX #'6
  1393.        JSR CMD
  1394.        JSR DISA
  1395.        JSR FDRIVE
  1396.        BNE CHERR
  1397.        LDA #FALSE
  1398.        JSR TDRIVE
  1399.        JSR GTBLCK
  1400.        LDA #2
  1401.        STA CHARD
  1402.        LDA #TRUE
  1403.        STA CHKING
  1404. ALREAD LDA WHERR
  1405.        BEQ NOTWHR
  1406.        LDA #FALSE
  1407.        STA CHKING
  1408.        STA WHERR
  1409.        JMP CSTAT
  1410. NOTWHR LDY YSAVE
  1411.        CLC
  1412.        RTS
  1413. CHERR  JSR ENA
  1414.        JMP CSTAT
  1415. ;
  1416. GETIN  STX XSAVE
  1417.        STY YSAVE
  1418.        LDA DFLTN
  1419.        CMP DEV
  1420.        BEQ GETFST
  1421. NORBIN JMP (OLDBAS)
  1422. GETFST LDA FAST
  1423.        BEQ NORBIN
  1424.        LDA CHKING
  1425.        BEQ NORBIN
  1426.        LDA STATUS
  1427.        BEQ NOCR
  1428.        JMP RETCR
  1429. NOCR   LDX CHARD
  1430.        LDA UBUF,X
  1431.        PHA
  1432.        INC CHARD
  1433.        LDA UBUF
  1434.        BNE TSTBLK
  1435.        CPX UBUF+1
  1436.        BCC ENDGET
  1437.        LDA #EOF
  1438.        STA STATUS
  1439. ENDGET PLA
  1440.        LDX XSAVE
  1441.        LDY YSAVE
  1442.        CLC
  1443.        RTS
  1444. TSTBLK INX
  1445.        BNE ENDGET
  1446.        JSR DISA
  1447.        JSR FDRIVE
  1448.        BNE GETERR
  1449.        LDA #FALSE
  1450.        JSR TDRIVE
  1451.        JSR GTBLCK
  1452.        LDA #2
  1453.        STA CHARD
  1454.        BNE ENDGET
  1455. GETERR JSR ENA
  1456.        LDA #EOF
  1457.        STA STATUS
  1458.        LDA #TRUE
  1459.        STA WHERR
  1460.        BNE ENDGET
  1461. ;
  1462. CLOSE  TAX
  1463.        BEQ OCLOS
  1464.        CMP FAST
  1465.        BEQ FSTCLS
  1466. OCLOS  JMP (OLDCLS)
  1467. FSTCLS JSR FINDFI
  1468.        BNE FILFN
  1469.        JSR SFIPAR
  1470.        JSR DELPAR
  1471.        LDA CHKING
  1472.        BEQ CLINIT
  1473.        LDA WHERR
  1474.        BNE CLINIT
  1475.        LDA UBUF
  1476.        BEQ CLINIT
  1477.        JSR DISA
  1478.        JSR FDRIVE
  1479.        BNE DISCLS
  1480.        LDA #TRUE
  1481.        JSR TDRIVE
  1482. DISCLS JSR ENA
  1483. CLINIT LDA #FALSE
  1484.        STA CHKING
  1485.        STA FAST
  1486.        LDA WHERR
  1487.        BNE FILFN
  1488.        JSR PASSI
  1489. FILFN  CLC
  1490.        RTS
  1491. ;
  1492. CLR    LDX DFLTN
  1493.        CPX DEV
  1494.        BEQ POSFA
  1495. OCLR   JMP (OLDCLR)
  1496. POSFA  LDA FAST
  1497.        BEQ OCLR
  1498.        LDX #3
  1499.        STX DFLTO
  1500.        LDA #0
  1501.        STA DFLTN
  1502.        RTS
  1503. ;
  1504. CHFOUT CPX #0
  1505.        BEQ TESTCH
  1506. NOROUT JMP (OLDOUT)
  1507. TESTCH JSR FSTOPN
  1508.        JSR DRPROT
  1509.        JMP NOROUT
  1510. ;
  1511. HANDLE CPY #0
  1512.        BEQ TRPOLD
  1513.        CPY FAST
  1514.        BNE WHTEST
  1515.        PHA
  1516.        STX XSAVE
  1517.        STY YSAVE
  1518.        TYA
  1519.        JSR CLOSE
  1520.        LDX XSAVE
  1521.        LDY YSAVE
  1522. OHAND  PLA
  1523. TRPOLD JMP (OLDTRP)
  1524. WHTEST PHA
  1525.        LDA WHERR
  1526.        BEQ OHAND
  1527.        JSR PASSI
  1528.        LDA #FALSE
  1529.        STA WHERR
  1530.        BEQ OHAND
  1531. ;
  1532. FILELA LDY LA
  1533.        .BYTE SKIP
  1534. FILE0  LDY #0
  1535. SETERR STA COPY
  1536.        STX COPY+1
  1537.        STY YSAVE
  1538.        LDY #0
  1539. TRERR  LDA (COPY),Y
  1540.        BEQ SETLEN
  1541.        STA ERTEXT,Y
  1542.        INY
  1543.        BNE TRERR
  1544. SETLEN STY ERTLEN
  1545.        LDA #INJUMP
  1546.        STA Q1
  1547.        LDA #<TRAPVC
  1548.        STA Q1+1
  1549.        LDA #>TRAPVC
  1550.        STA Q1+2
  1551.        INY
  1552.        LDA (COPY),Y
  1553.        TAX
  1554.        INY
  1555.        LDA (COPY),Y
  1556.        LDY YSAVE
  1557.        JSR GOTO
  1558.        .BYTE PAGEB,<Q1,>Q1
  1559. ;
  1560. IFCOPY LDA #<DRVS1
  1561.        LDY #>DRVS1
  1562.        JSR SOURCE
  1563.        LDX #<ENDR1
  1564.        LDY #>ENDR1
  1565.        JSR TRANS
  1566.        LDX #'4
  1567.        JSR CMD
  1568.        LDA DEV
  1569.        JSR TALK
  1570.        LDA #15+LCOM
  1571.        JSR TKSA
  1572.        JSR IECIN
  1573.        ASL A
  1574.        ASL A
  1575.        ASL A
  1576.        ASL A
  1577.        STA XSAVE
  1578.        JSR IECIN
  1579.        AND #$0F
  1580.        ORA XSAVE
  1581.        TAX
  1582. CLRBUF JSR IECIN
  1583.        CMP #CR
  1584.        BNE CLRBUF
  1585.        JSR UNTALK
  1586.        CPX #$23
  1587.        BEQ NOTILL
  1588.        LDX #'5
  1589.        JSR CMD
  1590.        LDA #<ILCOPY
  1591.        LDX #>ILCOPY
  1592.        JSR TEXT
  1593.        LDA #<PAGE
  1594.        LDY #>PAGE
  1595.        STA FROM
  1596.        STY FROM+1
  1597.        LDY #0
  1598. NXTDES STA (FROM),Y
  1599.        INY
  1600.        BNE NDPINC
  1601.        INC FROM+1
  1602. NDPINC CPY #<NXTDES
  1603.        BCC NXTDES
  1604.        LDX FROM+1
  1605.        CPX #>NXTDES
  1606.        BCC NXTDES
  1607. HANG   JMP HANG
  1608. NOTILL JMP PASSI
  1609. ;
  1610. .LIB   RABMSG
  1611. ;
  1612. TURN
  1613. .BYTE  'UNUSED DEVICE ON'
  1614. .BYTE  0,<300,>300
  1615. ALOPN
  1616. .BYTE  'FASTFILE OPEN'
  1617. .BYTE  0,<301,>301
  1618. NORFIL
  1619. .BYTE  'DISKFILE OPEN'
  1620. .BYTE  0,<302,>302
  1621. STRING
  1622. .BYTE  'INVALID BUFFER STRING'
  1623. .BYTE  0,<303,>303
  1624. BLKMOD
  1625. .BYTE 'DISKMEMORY PROTECTED'
  1626. .BYTE 0,<304,>304
  1627. NOVAL
  1628. .BYTE  'NOT IN BLOCK MODE'
  1629. .BYTE 0,<305,>305
  1630. NOTFST
  1631. .BYTE 'NOT IN FAST MODE'
  1632. .BYTE 0,<306,>306
  1633. NOTBUF
  1634. .BYTE 'NO BLOCK READ'
  1635. .BYTE 0,<307,>307
  1636. ILCOPY
  1637. .BYTE  CLRPAG,CR,' THIS IS AN'
  1638. .BYTE  ' ILLEGAL COPY',0
  1639. KILL
  1640. .BYTE 'DISKRABBIT IS DISABLED'
  1641. .BYTE  ' NOW',CR,CR,0
  1642. SPU
  1643. .BYTE 'SPU'
  1644. ;
  1645. END    .END
  1646.